using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
/// <summary>
/// 不继承MonoBehaviour单例模式基类
/// 说明：继承了这个类的类自带单例模式
/// </summary>
/// <typeparam name="T"></typeparam>
public class SingletonBase<T> where T : SingletonBase<T> //泛型T必须为这个类本身或者是他的子类
{
    /// <summary>
    /// 构造方法私有化，防止外部new对象
    /// </summary>
    protected SingletonBase()
    {

    }
    //线程锁。当多线程访问时,同一时刻仅允许一个线程访问
    private static object locker = new object();

    //volatile:关键字修饰字段，当多个县城都对它进行修改时，可以确保这个字段在任何时刻呈现的都算最新的值
    private volatile static T instance;
    public static T Instance
    {
        get
        {
            //保证对象唯一性

            if (instance == null)
            {
                lock (locker)
                {
                    if (instance == null)
                    {
                        instance = Activator.CreateInstance(typeof(T), true) as T;//使用反射,调用无参构造方法创建对象 
                    }
                }
            }





            return instance;
        }
    }
}
